﻿using System;
using System.IO;
using System.Windows.Forms;
using Cav;
using Cav.WinForm.BaseClases;
using Nefela.BusinessLogic;
using Nefela.CommonTypes;

namespace Nefela.UI
{
    public partial class fmDocAdd : DialogFormBase
    {
        public fmDocAdd()
        {
            InitializeComponent();
        }

        public TemplateDocumentType TempDoc { get; set; }
        private TemplateDocumentType originalTempDoc { get; set; }

        private void fmDocAddEdit_Load(object sender, EventArgs e)
        {
            if (TempDoc == null)
                TempDoc = new TemplateDocumentType();
            else
                originalTempDoc = TempDoc.Clone();

            this.tbName.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.TempDoc, "Name", true));
            this.tbFileOutName.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.TempDoc, "FileNameOutput", true));
        }

        private void blLoadTemplate_Click(object sender, EventArgs e)
        {
            pbLoaded.Visible = false;

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.CheckFileExists = true;
            ofd.AddExtension = true;
            ofd.CheckPathExists = true;
            ofd.DefaultExt = ".docx";
            ofd.Filter = "Документы Word(.docx)|*.docx";
            ofd.Multiselect = false;
            ofd.SupportMultiDottedExtensions = true;
            ofd.Title = "Файл шаблона документа";

            if (ofd.ShowDialog(this) != System.Windows.Forms.DialogResult.OK)
                return;
            try
            {

                TempDoc.FileTemplate = File.ReadAllBytes(ofd.FileName);
                pbLoaded.Visible = true;
            }
            catch (Exception ex)
            {
                Dialogs.ErrorF(this, ex.Expand(), "Ошибка открытия файла");
            }
        }

        private void fmDocAddEdit_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (this.DialogResult != System.Windows.Forms.DialogResult.OK)
            {
                if (originalTempDoc != null)
                {
                    TempDoc.Name = originalTempDoc.Name;
                    TempDoc.FileNameOutput = originalTempDoc.FileNameOutput;
                    TempDoc.FileTemplate = originalTempDoc.FileTemplate;
                }

                return;
            }

            this.TempDoc.FileNameOutput = this.TempDoc.FileNameOutput.ReplaceInvalidPathChars();

            string msg;

            var tdc = ((SettingsBL)BusinessLogic).ModelPackegeDocs;
            if (!tdc.TemplatesDocs.Contains(this.TempDoc))
            {
                msg = tdc.AddTemplateDocs(this.TempDoc);
                if (!msg.IsNullOrWhiteSpace())
                {
                    Dialogs.InformationF(this, msg);
                    e.Cancel = true;
                    return;
                }
            }

            // TODO вынести код в класс шаблонов документов (сделать метод проверки)
            foreach (var item in tdc.TemplatesDocs)
            {
                if (item == TempDoc)
                    continue;

                if (item.Name == TempDoc.Name)
                {
                    Dialogs.InformationF(this, "Шаблон с таким именем уже есть");
                    e.Cancel = true;
                    return;
                }

                if (item.FileNameOutput == TempDoc.FileNameOutput)
                {
                    Dialogs.InformationF(this, "Шаблон с таким именем файла уже есть");
                    e.Cancel = true;
                    return;
                }


            }
        }
    }
}
